{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 导入数据包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from sklearn.metrics import r2_score\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 数据探索\n",
    "### 2.1 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"day.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(731, 16)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 数据准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>365</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.370000</td>\n",
       "      <td>0.375621</td>\n",
       "      <td>0.692500</td>\n",
       "      <td>0.192167</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>366</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.273043</td>\n",
       "      <td>0.252304</td>\n",
       "      <td>0.381304</td>\n",
       "      <td>0.329665</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>367</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.150000</td>\n",
       "      <td>0.126275</td>\n",
       "      <td>0.441250</td>\n",
       "      <td>0.365671</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>368</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.107500</td>\n",
       "      <td>0.119337</td>\n",
       "      <td>0.414583</td>\n",
       "      <td>0.184700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>369</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.265833</td>\n",
       "      <td>0.278412</td>\n",
       "      <td>0.524167</td>\n",
       "      <td>0.129987</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     season  mnth  holiday  weekday  workingday  weathersit      temp  \\\n",
       "365       1     1        0        0           0           1  0.370000   \n",
       "366       1     1        1        1           0           1  0.273043   \n",
       "367       1     1        0        2           1           1  0.150000   \n",
       "368       1     1        0        3           1           2  0.107500   \n",
       "369       1     1        0        4           1           1  0.265833   \n",
       "\n",
       "        atemp       hum  windspeed  \n",
       "365  0.375621  0.692500   0.192167  \n",
       "366  0.252304  0.381304   0.329665  \n",
       "367  0.126275  0.441250   0.365671  \n",
       "368  0.119337  0.414583   0.184700  \n",
       "369  0.278412  0.524167   0.129987  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = data.drop(['instant','dteday','yr','casual','registered','cnt'],axis=1)\n",
    "y = data['cnt'].values\n",
    "columns = X.columns\n",
    "\n",
    "X_train = X[0:365]\n",
    "X_test = X[365:]\n",
    "y_train = y[0:365]\n",
    "y_test = y[365:]\n",
    "\n",
    "# X_train = data_train.drop(['instant','dteday','yr','casual','registered','cnt'],axis=1)\n",
    "# y_train = data_train['cnt'].values\n",
    "# X_test = data_test.drop(['instant','dteday','yr','casual','registered','cnt'],axis=1)\n",
    "# y_test = data_test['cnt'].values\n",
    "X_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n",
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n",
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "ss_X = StandardScaler()\n",
    "ss_y = StandardScaler()\n",
    "\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "X_test = ss_X.transform(X_test)\n",
    "\n",
    "y_train = ss_y.fit_transform(y_train.reshape(-1,1))\n",
    "y_test = ss_y.transform(y_test.reshape(-1,1))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 模型选择\n",
    "### 3.1 线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "lr = LinearRegression()\n",
    "\n",
    "lr.fit(X_train,y_train)\n",
    "\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on test is -0.6965661915185128\n",
      "The r2 score of LinearRegression on test is 0.758519666910396\n"
     ]
    }
   ],
   "source": [
    "print ('The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr))\n",
    "print ('The r2 score of LinearRegression on test is', r2_score(y_train, y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2 岭回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of RidgeCV on test is -0.7011352437314151\n",
      "The r2 score of RidgeCV on train is 0.7576975492426061\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import RidgeCV\n",
    "\n",
    "alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "\n",
    "ridge = RidgeCV(alphas=alphas,store_cv_values=True)\n",
    "\n",
    "ridge.fit(X_train,y_train)\n",
    "\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "print ('The r2 score of RidgeCV on test is', r2_score(y_test, y_test_pred_ridge))\n",
    "print ('The r2 score of RidgeCV on train is', r2_score(y_train, y_train_pred_ridge))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>temp</td>\n",
       "      <td>[0.6552364353084569]</td>\n",
       "      <td>[0.35015384686244877]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>season</td>\n",
       "      <td>[0.29517804267926906]</td>\n",
       "      <td>[0.27576542513648067]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>weekday</td>\n",
       "      <td>[0.03533240218145289]</td>\n",
       "      <td>[0.03399899497824491]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>workingday</td>\n",
       "      <td>[0.0072862815746973794]</td>\n",
       "      <td>[0.007293423015388538]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>mnth</td>\n",
       "      <td>[0.0038685715616474103]</td>\n",
       "      <td>[0.018836006955483355]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>atemp</td>\n",
       "      <td>[-0.021140727599850376]</td>\n",
       "      <td>[0.28047096356275186]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>holiday</td>\n",
       "      <td>[-0.03601989254948194]</td>\n",
       "      <td>[-0.03364170993901818]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>hum</td>\n",
       "      <td>[-0.05942477581033447]</td>\n",
       "      <td>[-0.06294976734687995]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>[-0.12391854742331623]</td>\n",
       "      <td>[-0.11713890245230485]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>weathersit</td>\n",
       "      <td>[-0.2256947758690207]</td>\n",
       "      <td>[-0.2164268827072564]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      columns                  coef_lr              coef_ridge\n",
       "6        temp     [0.6552364353084569]   [0.35015384686244877]\n",
       "0      season    [0.29517804267926906]   [0.27576542513648067]\n",
       "3     weekday    [0.03533240218145289]   [0.03399899497824491]\n",
       "4  workingday  [0.0072862815746973794]  [0.007293423015388538]\n",
       "1        mnth  [0.0038685715616474103]  [0.018836006955483355]\n",
       "7       atemp  [-0.021140727599850376]   [0.28047096356275186]\n",
       "2     holiday   [-0.03601989254948194]  [-0.03364170993901818]\n",
       "8         hum   [-0.05942477581033447]  [-0.06294976734687995]\n",
       "9   windspeed   [-0.12391854742331623]  [-0.11713890245230485]\n",
       "5  weathersit    [-0.2256947758690207]   [-0.2164268827072564]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3 Lasso"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:1094: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on test is -0.863855024061922\n",
      "The r2 score of LassoCV on train is 0.692374913339408\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "lasso = LassoCV()\n",
    "\n",
    "lasso.fit(X_train,y_train)\n",
    "\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "print ('The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_lasso))\n",
    "print ('The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_lasso))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 0.14527588617252218\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>coef_lasso</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>temp</td>\n",
       "      <td>[0.6552364353084569]</td>\n",
       "      <td>[0.35015384686244877]</td>\n",
       "      <td>0.067640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>season</td>\n",
       "      <td>[0.29517804267926906]</td>\n",
       "      <td>[0.27576542513648067]</td>\n",
       "      <td>0.193429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>weekday</td>\n",
       "      <td>[0.03533240218145289]</td>\n",
       "      <td>[0.03399899497824491]</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>workingday</td>\n",
       "      <td>[0.0072862815746973794]</td>\n",
       "      <td>[0.007293423015388538]</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>mnth</td>\n",
       "      <td>[0.0038685715616474103]</td>\n",
       "      <td>[0.018836006955483355]</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>atemp</td>\n",
       "      <td>[-0.021140727599850376]</td>\n",
       "      <td>[0.28047096356275186]</td>\n",
       "      <td>0.476180</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>holiday</td>\n",
       "      <td>[-0.03601989254948194]</td>\n",
       "      <td>[-0.03364170993901818]</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>hum</td>\n",
       "      <td>[-0.05942477581033447]</td>\n",
       "      <td>[-0.06294976734687995]</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>[-0.12391854742331623]</td>\n",
       "      <td>[-0.11713890245230485]</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>weathersit</td>\n",
       "      <td>[-0.2256947758690207]</td>\n",
       "      <td>[-0.2164268827072564]</td>\n",
       "      <td>-0.127561</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      columns                  coef_lr              coef_ridge  coef_lasso\n",
       "6        temp     [0.6552364353084569]   [0.35015384686244877]    0.067640\n",
       "0      season    [0.29517804267926906]   [0.27576542513648067]    0.193429\n",
       "3     weekday    [0.03533240218145289]   [0.03399899497824491]    0.000000\n",
       "4  workingday  [0.0072862815746973794]  [0.007293423015388538]    0.000000\n",
       "1        mnth  [0.0038685715616474103]  [0.018836006955483355]    0.000000\n",
       "7       atemp  [-0.021140727599850376]   [0.28047096356275186]    0.476180\n",
       "2     holiday   [-0.03601989254948194]  [-0.03364170993901818]   -0.000000\n",
       "8         hum   [-0.05942477581033447]  [-0.06294976734687995]   -0.000000\n",
       "9   windspeed   [-0.12391854742331623]  [-0.11713890245230485]   -0.000000\n",
       "5  weathersit    [-0.2256947758690207]   [-0.2164268827072564]   -0.127561"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "\n",
    "print ('alpha is:', lasso.alpha_)\n",
    "\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T)), \"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
